<?php if (!defined('BASEPATH'))exit('No direct script access allowed');

include_once 'main.php';

/**
 * Controller para ações de um Item (Livro, Magazine, Midia)
 * 
 * @author Douglas Rafael
 * @package controllers     
 */
class Item extends Main {

    public function __construct() {
        parent::__construct();
        //Verifica se o usuário estar logado no sistema
        $this->verificaLogado();
        
        // Carrega class nescessárias
        $this->load->model(array('DAOItem', 'DAOEmprestimo'));
        $this->load->helper('text');

        //Seta propriedades do template
        $arr_js = $this->config->item('js');
        array_push($arr_js, 'jquery.lightbox-0.5');
        $this->template->load_js($arr_js);
        $this->template->set('title', 'Gerenciamento de Item || ' . $this->title);
        $this->template->set('page_title', 'Gerenciamento de Item (Livro, Magazine, Mídia)');
        $this->template->set('page_infor', '<h2 class="title-infor">informações gerais</h2>
                        <p>Passe o cursor do mouse sobre a capa do item e veja alguns dados, como o status para empréstimo.</p>
                        <p><span class="bold">Só é possível excluir um ITEM (livro, magazine, mídia) se ele não estiver relacionado com nenhum empréstimo.</span></p>');

        $this->load->model('DAOEmprestimo');
        $this->load->helper('text');
    }

    public function index() {
        $this->check_redirect();
    }

    /**
     * faz a checagem de qual item deve ser redirecionado
     */
    public function check_redirect() {
        $this->load->model("ControleAcesso");
        $permicao_livro = $this->ControleAcesso->checaPermicao(ControleAcesso::CONSULTAR_LIVRO);
        $permicao_magazine = $this->ControleAcesso->checaPermicao(ControleAcesso::CONSULTAR_MAGAZINE);
        $permicao_midia = $this->ControleAcesso->checaPermicao(ControleAcesso::CONSULTAR_MIDIA);
        
        if ($permicao_livro && $permicao_magazine && $permicao_midia) {
            $this->listar();
        } else if ($permicao_livro) {
            redirect('livro');
        } else if ($permicao_magazine) {
            redirect('magazine');
        } else if ($permicao_midia) {
            redirect('midia');
        } else {
            Main::no_permission();
        }
    }
    
    
    /**
     * Função para selciocionar item no auto_complete
     */
    public function auto_complete_item() {
        $term = $this->input->get('term', TRUE);
        echo json_encode($this->DAOItem->suggestion_itens($term));
    }
    
    /** 
     * Retorno via json o item de acordo com o código
     */
    public function get_item_json() {
        try {
            $this->load->library('form_validation');
            $this->load->helper('html');
            
            $this->form_validation->set_rules("codigo_item", "Código", "trim|required|min_length[6]|max_length[6]|xss_clean");
            $this->form_validation->set_rules("tipo_item", "Tipo", "trim|required|exac_length[1]|xss_clean");

            if ($this->form_validation->run() == FALSE) {
                echo validation_errors();
            } else {
                $item = new TOItem();
                $item->codigo = $this->input->post('codigo_item', TRUE);
                $item->titulo = $this->input->post('titulo_item', TRUE);
                $item->tipo = new TOTipo();
                $item->tipo->id = $this->input->post('tipo_item', TRUE);

                $data['item'] = $this->DAOItem->get_item($item);
                $data['tipo_name'] = $data['item']->to_string_tipo_item(2);
                
                /**
                 * Verificando disponibilidade para empréstimo. Se houver mensagem é porque o item não estar apto para empréstimos
                 */
                $this->load->model('DAOEmprestimo');
                if($this->DAOEmprestimo->check_availability_item($item) != NULL) {
                    $data['status_loan'] = FALSE;
                    //Pegando a mensagem para exibir ao usuário o porque não apto para emprestimo o item
                    $data['status_messege'] = $this->DAOEmprestimo->check_availability_item($item);
                }else { //ITEM estar APTO
                    $data['status_loan'] = TRUE;

                    /** Montando TABLE com dados do item selecionado **/
                    $image_properties = array(
                        'src' => 'assets/img/del_remove.png',
                        'onclick' => 'remove_item(' . "'" . $data['item']->codigo . "'" . ');',
                        'class' => 'pointer',
                        'title' => 'Remover item da lista'
                    );
                    // Se for LIVRO
                    if($data['item']->tipo->id == TOItem::TIPO_BOOK){
                        $row = '<tr class="' . $data['item']->codigo . '"><td> 
                            <h4>' . $data['item']->titulo . nbs(2) . img($image_properties) . '</h4>
                            <p><b>Código: </b>' . $data['item']->codigo . '</p>
                            <p><b>Editora: </b>' . $data['item']->livro->editora->nome . '</p>
                            <p><b>Autor: </b>' . $data['item']->livro->to_string_autores() . '</p>
                            <p><b>Tipo: </b>' . $data['item']->to_string_tipo_item(2) . '</p>
                            <p><b>Total para empréstimos: </b>' . string_fill($data['item']->movimentacao->total_manipulacao, 2, 0) . '</p>
                            <p><b>Total disponível: </b>' . string_fill($data['item']->movimentacao->total_disponivel, 2, 0) . '</p><hr></td>';
                    }
                    //Se for MAGAZINE
                    else if($data['item']->tipo->id == TOItem::TIPO_MAGAZINE){
                         $row = '<tr class="' . $data['item']->codigo . '"><td> 
                            <h4>' . $data['item']->titulo . nbs(2) . img($image_properties) . '</h4>
                            <p><b>Código: </b>' . $data['item']->codigo . '</p>
                            <p><b>Editora: </b>' . $data['item']->magazine->editora->nome . '</p>
                            <p><b>Tipo: </b>' . $data['item']->to_string_tipo_item(2) . '</p>
                            <p><b>Total para empréstimos: </b>' . string_fill($data['item']->movimentacao->total_manipulacao, 2, 0) . '</p>
                            <p><b>Total disponível: </b>' . string_fill($data['item']->movimentacao->total_disponivel, 2, 0) . '</p><hr></td>';
                        
                    }
                    //Se for MÍDIA
                    else if($data['item']->tipo->id == TOItem::TIPO_MIDIA){
                         $row = '<tr class="' . $data['item']->codigo . '"><td> 
                            <h4>' . $data['item']->titulo . nbs(2) . img($image_properties) . '</h4>
                            <p><b>Código: </b>' . $data['item']->codigo . '</p>
                            <p><b>Idioma: </b>' . $data['item']->idioma. '</p>
                            <p><b>Tipo: </b>' . $data['item']->to_string_tipo_item(2) . '</p>
                            <p><b>Total para empréstimos: </b>' . string_fill($data['item']->movimentacao->total_manipulacao, 2, 0) . '</p>
                            <p><b>Total disponível: </b>' . string_fill($data['item']->movimentacao->total_disponivel, 2, 0) . '</p><hr></td>';                        
                    }
                    $data['enquiries_table'] = $row .= '<td><input type="number" min="1" name="total_itens[]" class="total_itens" value="1" placeholder="Quantidade do item" title="Quantidade do item que deseja solicitar para empréstimo" required/></td></tr>';;
                    /** End TABLE **/
                }
                    
                echo json_encode($data);
            }
        } catch (Exception $erro) {
            Mensagem::setExcecao($erro);
            $this->index();
        }
    }
    
    /**
     * Listar todos os itens cadastrados
     */
    public function listar() {
        try {
            // Removendo a variavel 'searchterm' da sessão
            $this->session->unset_userdata('searchterm');

            $init = ($this->uri->segment(4)) ? $this->uri->segment(4) : 0;

            $total_pagina = $this->uri->segment(3) ? $this->uri->segment(3) : 30;
            $itens = $this->DAOItem->select_all_itens($init, $total_pagina);
            $total_rows = $this->DAOItem->amount_all_itens();

            // paginação
            $config['uri_segment'] = 4;
            $config['base_url'] = base_url() . "item/listar/" . $total_pagina;
            $config['total_rows'] = $total_rows;
            $config['per_page'] = $total_pagina;
            $this->pagination->initialize($config);

            //data
            $data['total_rows'] = $this->treat_number_rows($total_rows);
            $data['quant_list'] = $total_pagina;
            $data['pagination'] = $this->pagination->create_links();
            $data['itens'] = $itens;

            $this->template->load(NULL, 'itens_list', $data);
        } catch (Exception $erro) {
            Mensagem::setExcecao($erro);
            $this->index();
        }
    }
    
    
    /**
     * Busca por itens
     */
    public function buscar() {
        try {
            // Seta a variavel 'searchterm' na sessão
            $searchterm = $this->searchtermHandler($this->input->get_post('search_term', TRUE));

            $init = ($this->uri->segment(4)) ? $this->uri->segment(4) : 0;

            $total_pagina = $this->uri->segment(3) ? $this->uri->segment(3) : 30;
            $itens = $this->DAOItem->search_item($init, $total_pagina, $searchterm);
            $total_rows = $this->DAOItem->amount_search_item($searchterm);

            // paginação
            $config['uri_segment'] = 4;
            $config['base_url'] = base_url() . "item/buscar/" . $total_pagina;
            $config['total_rows'] = $total_rows;
            $config['per_page'] = $total_pagina;
            $this->pagination->initialize($config);

            //data
            $data['total_rows'] = $this->treat_number_rows($total_rows);
            $data['quant_list'] = $total_pagina;
            $data['pagination'] = $this->pagination->create_links();
            $data['itens'] = $itens;

            if ($total_rows == 0)
                Mensagem::setMensagem("Nenhum registro foi encontrado para essa pesquisa: <span class='bold'> $searchterm </span>", "aviso");

            $this->template->load(NULL, 'itens_list', $data);
        } catch (Exception $erro) {
            Mensagem::setExcecao($erro);
            $this->listar();
        }
    }
    
    /**
     * Verifica e seleciona o item de acordo com o seu tipo
     */
    public function check_get_item_json() {
        $this->load->library('form_validation');
        $this->form_validation->set_rules("codigo_item", "Código", "trim|required|min_length[6]|max_length[6]|xss_clean");
        $this->form_validation->set_rules("tipo_item", "Tipo", "trim|required|exac_length[1]|xss_clean");

        if ($this->form_validation->run() == FALSE) {
            echo validation_errors();
        } else {
            $codigo_item = $this->input->post('codigo_item', TRUE);
            $tipo_item = $this->input->post('tipo_item', TRUE);

            if ($tipo_item == TOItem::TIPO_BOOK) {
                include_once 'livro.php';
                $controller_livro = new Livro();
                $data = $controller_livro->get_book_json($codigo_item);
            } elseif ($tipo_item == TOItem::TIPO_MAGAZINE) {
                include_once 'magazine.php';
                $controller_magazine = new Magazine();
                $data = $controller_magazine->get_magazine($codigo_item);
            } elseif ($tipo_item == TOItem::TIPO_MIDIA) {
                include_once 'midia.php';
                $controller_midia = new Midia();
                $data = $controller_midia->get_media($codigo_item);
            }
            echo $data;
        }
    }
    
    /**
     * Exlcui o item
     */
    public function excluir() {
        try {
            $tipo_item = $this->input->post('itemTipo', TRUE);
            
            if ($tipo_item == TOItem::TIPO_BOOK) {
                include_once 'livro.php';
                $controller_livro = new Livro();
                $data = $controller_livro->excluir(FALSE);
            } elseif ($tipo_item == TOItem::TIPO_MAGAZINE) {
                include_once 'magazine.php';
                $controller_magazine = new Magazine();
                $data = $controller_magazine->excluir(FALSE);
            } elseif ($tipo_item == TOItem::TIPO_MIDIA) {
                include_once 'midia.php';
                $controller_midia = new Midia();
                $data = $controller_midia->excluir(FALSE);
            }
            
            $this->listar();
        } catch (Exception $erro) {
            Mensagem::setExcecao($erro);
            $this->index();
        }
    }

}
